<?php

/**
 * configuracion actions.
 *
 * @package    Acatec
 * @subpackage configuracion
 * @author     Jose Antonio Sánchez Bedoya
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class configuracionActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->crm_configuracions = Doctrine_Core::getTable('Configuracion')
      ->createQuery('a')
      ->execute();
  }

  public function executeShow(sfWebRequest $request)
  {
    $this->crm_configuracion = Doctrine_Core::getTable('Configuracion')->find(array($request->getParameter('id')));
    $this->forward404Unless($this->crm_configuracion);
  }

  public function executeNew(sfWebRequest $request)
  {
    $this->form = new ConfiguracionForm();
  }

  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new ConfiguracionForm();

    $this->processForm($request, $this->form);

    $this->setTemplate('new');
  }

  /*
   *  Metodo que se llama para editar toda la configuracion de la empresa de una vez 
   * (parámetros solo campo y valor que figuran como formularios embebidos de Empresa).
   */  
  public function executeEditarTodos(sfWebRequest $request)
  {
    //Pongo la vble de sesión a false, para indicar que no es la configuración de cumpleaños lo que estamos tratando.  
    $this->getUser()->setAttribute('confcumples', false);
    /* Creamos la consulta para obtener el idempresa, como solo hay una cojo la primera.
     * no tengo en consideración que esté relacionado con el nombre de usuario    
     */
    $q = Doctrine_Query::create()
            ->select('id')
            ->from('Empresa id');          
    $id_empresa = $q->fetchOne(array(), Doctrine_Core::HYDRATE_SCALAR);

    $this->forward404Unless($crm_empresa = Doctrine_Core::getTable('Empresa')->find($id_empresa), sprintf('Object crm_configuracion does not exist (%s).', $id_empresa));
    
    $this->form = new EmpresaForm($crm_empresa);
    //Lo hago aquí y no en la configuración para que solo estén aquí esos datos y no en los formularios del módulo empresa.
    $this->form->embedRelation('Configuracion');

    /*
     * Deshabilitamos los campos de empresa, para que solamente quede el formulario embebido
     * es necesario hacerlo con todos los campos (requeridos y no requeridos) para que no se
     * queden vacíos en el formulario.
     */
    $this->form->setWidget('cif', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('nombre', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('direccion_linea1', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('direccion_linea2', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('cp', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('poblacion', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('provincia', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('telefono', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('fax', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('web', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('email', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('logo', new sfWidgetFormInputHidden(array()));
    $this->form->setWidget('descripcion', new sfWidgetFormInputHidden(array()));
    
    // Y creo una vble de sesión para que en la empresa al actualizar solo embeba el formulario si viene de aquí.
    $this->getUser()->setAttribute('confgeneral', true);
  }
  
  public function executeEdit(sfWebRequest $request)
  {
    $this->forward404Unless($crm_configuracion = Doctrine_Core::getTable('Configuracion')->find(array($request->getParameter('id'))), sprintf('Object crm_configuracion does not exist (%s).', $request->getParameter('id')));
    
    //Los campos primeraFactura y numFactura no pueden editarse
    //if ((($crm_configuracion->getCampo() == 'primeraFactura') || (($crm_configuracion->getCampo() == 'numFactura') && (!$this->esPrimeraFactura()))) || 
    //    (($crm_configuracion->getCampo() == 'primerAlbaran') || (($crm_configuracion->getCampo() == 'numAlbaran') && (!$this->esPrimerAlbaran()))) ||
    //    (($crm_configuracion->getCampo() == 'primerPresupuesto') || (($crm_configuracion->getCampo() == 'numPresupuesto') && (!$this->esPrimerPresupuesto()))) )
    //{
    //    $this->setTemplate('noEditable');
    //}
    //else{
        $this->form = new ConfiguracionForm($crm_configuracion);
        $this->form->setWidget('campo', new sfWidgetFormInput(array('default' => $crm_configuracion->getCampo()),array('readonly'=>'readonly')));
    //}    
  }
  
  /* 
   * Métodos auxiliares que utiliza executeEdit para determinar cuando un campo es el campo primerFactura, etc
   * para evitar que pueda editarse.
   */
  /* OBSOLETO */
  protected function esPrimeraFactura(){
    $campo = "primeraFactura";
    $q = Doctrine_Query::create()
    ->select('valor')
    ->from('CrmConfiguracion c1')
    ->where('c1.campo = ?',$campo);
    $primera = $q->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);
    return $primera;
  }
  
  /* OBSOLETO */
  protected function esPrimerAlbaran(){
    $campo = "primerAlbaran";
    $q = Doctrine_Query::create()
    ->select('valor')
    ->from('CrmConfiguracion c1')
    ->where('c1.campo = ?',$campo);
    $primera = $q->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);
    return $primera;
  }
  
  /* OBSOLETO */
  protected function esPrimerPresupuesto(){
    $campo = "primerPresupuesto";
    $q = Doctrine_Query::create()
    ->select('valor')
    ->from('CrmConfiguracion c1')
    ->where('c1.campo = ?',$campo);
    $primera = $q->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);
    return $primera;
  }  
  
  public function executeNoEditable(sfWebRequest $request){
      
  }
    

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($crm_configuracion = Doctrine_Core::getTable('Configuracion')->find(array($request->getParameter('id'))), sprintf('Object crm_configuracion does not exist (%s).', $request->getParameter('id')));
    $this->form = new ConfiguracionForm($crm_configuracion);

    $this->processForm($request, $this->form);

    $this->setTemplate('edit');
  }

  
  /*
   * Método que muestra un formulario que permite cambiar la primera vez el número de presupuesto.
   */
  /* OBSOLETO */
  public function executePrimerPresupuesto(sfWebRequest $request)
  {
    $campo = "numPresupuesto";
    $q = Doctrine_Query::create()
            ->select('id')
            ->from('Configuracion c1')
            ->where('c1.campo = ?',$campo);
    $id = $q->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);

    $this->forward404Unless($crm_configuracion = Doctrine_Core::getTable('Configuracion')->find(array($id)), sprintf('Object crm_configuracion does not exist (%s).', $id));
    $this->form = new CrmConfiguracionForm($crm_configuracion);
    $this->form->setWidget('campo', new sfWidgetFormInputHidden(array('default' => $crm_configuracion->getCampo())));      
    
  }
  
  /*
   * Método que muestra un formulario que permite cambiar la primera vez el número de parte.
   */
  /* OBSOLETO */
  public function executePrimerAlbaran(sfWebRequest $request)
  {
    $campo = "numAlbaran";
    $q = Doctrine_Query::create()
            ->select('id')
            ->from('Configuracion c1')
            ->where('c1.campo = ?',$campo);
    $id = $q->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);

    $this->forward404Unless($crm_configuracion = Doctrine_Core::getTable('Configuracion')->find(array($id)), sprintf('Object crm_configuracion does not exist (%s).', $id));
    $this->form = new CrmConfiguracionForm($crm_configuracion);
    $this->form->setWidget('campo', new sfWidgetFormInputHidden(array('default' => $crm_configuracion->getCampo())));      
    
  }
  
   /*
   * Método que muestra un formulario que permite cambiar la primera vez el número de factura.
   */
  /* OBSOLETO */
  public function executePrimeraFactura(sfWebRequest $request)
  {
    $campo = "numFactura";
    $q = Doctrine_Query::create()
            ->select('id')
            ->from('Configuracion c1')
            ->where('c1.campo = ?',$campo);
    $id = $q->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);

    $this->forward404Unless($crm_configuracion = Doctrine_Core::getTable('Configuracion')->find(array($id)), sprintf('Object crm_configuracion does not exist (%s).', $id));
    $this->form = new CrmConfiguracionForm($crm_configuracion);
    $this->form->setWidget('campo', new sfWidgetFormInputHidden(array('default' => $crm_configuracion->getCampo())));      
    
  }
  
  /*
   * Antiguo método utilizado para guardar el formulario y todos los datos de él, ya no 
   * se utiliza (creo).
   */
  public function executeGuardarTodos(sfWebRequest $request)
  {
    //$this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    //$this->forward404Unless($crm_configuracion = Doctrine_Core::getTable('CrmConfiguracion')->find(array($request->getParameter('id'))), sprintf('Object crm_configuracion does not exist (%s).', $request->getParameter('id')));
    //$this->form = new CrmConfiguracionForm($crm_configuracion);

    $this->processForm($request, $this->form);

    //$this->setTemplate('edit');
  }
  
  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($crm_configuracion = Doctrine_Core::getTable('Configuracion')->find(array($request->getParameter('id'))), sprintf('Object crm_configuracion does not exist (%s).', $request->getParameter('id')));
    $crm_configuracion->delete();

    $this->redirect('configuracion/index');
  }


  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $crm_configuracion = $form->save();   //Redirecciono según de donde venga.
      //$this->redirect('configuracion/edit?id='.$crm_configuracion->getId());
      $this->redirect('inicio/list');
    }
  }
  
}
